﻿using AngularStart1.Data;
using AngularStart1.Models;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;

namespace TodoApi.Data
{
    public class EntityframeworkRepository : ITodoRepository
    {
        private readonly TodoContext _Context;

        public EntityframeworkRepository()
        {
          _Context  = new TodoContext();
        }

        public Todo Get(int id)
        {
            var todo = FindEntityById(id);
            return todo;
        }

        public Todo Add(Todo todo)
        {
            _Context.Todos.Add(todo);
            _Context.SaveChanges();
            return todo;
        }

        public void Remove(int id)
        {
            var todoToRemove = FindEntityById(id);
            _Context.Entry(todoToRemove).State = EntityState.Deleted;
            _Context.SaveChanges();
        }

        public void Complete(int id)
        {
            throw new NotImplementedException();
        }

        public List<Todo> List()
        {
            return _Context.Todos.ToList();
        }

        public Todo Update(Todo todo)
        {
            var todoToUpdate = FindEntityById(todo.TodoId.GetValueOrDefault());
            _Context.Entry(todoToUpdate).CurrentValues.SetValues(todo); // Reattach the entity and apply new properties!!
            _Context.SaveChanges();
            return todo;
        }

        private Todo FindEntityById(int id)
        {
            var todo = _Context.Todos.SingleOrDefault(t => t.TodoId == id);
            return todo;
        }

    }
}